#pragma once
#include "EpilValueObject.h"


class EpilBooleanObject;
class EpilNumberObject;
class EpilStringObject;


class EpilNilObject : public EpilValueObject
{
	EPIL_OBJECT_DECL( Nil );

public:
	EpilNilObject( EpilInterpreter * interpreter );
	virtual ~EpilNilObject();

	EpilObject *						OperateUnary( EpilUnaryOperator op );
	EpilObject *						OperateBinary( EpilBinaryOperator op, EpilObject * that );

	bool								operator==( const EpilObject & rhs ) const;
	bool								operator==( const EpilNilObject & rhs ) const;

	EpilValueObject *					Clone() const;

	virtual tstring						ToString() const;

private:
	EpilObject *						OperateBinaryInternal( EpilBinaryOperator op, EpilNilObject * that );
	EpilObject *						OperateBinaryInternal( EpilBinaryOperator op, EpilBooleanObject * that );
	EpilObject *						OperateBinaryInternal( EpilBinaryOperator op, EpilNumberObject * that );
	EpilObject *						OperateBinaryInternal( EpilBinaryOperator op, EpilStringObject * that );
};